import java.io.*;
//Importo el paquete que contiene la clase Persona, que he desarrollado
//en una clase aparte con sus atributos y métodos propios para usarlo en
//el ejercicio.
import Persona.*;



public class ej30 {

	public static void main(String[] args) throws IOException {
		
		int n_lista,ctotales=0, i;//maximo de la lista,contactos totales que existen en la lista, iteradores.
		boolean menu=true; //permite la salida del programa
		boolean borrado=false;//Controla el while del borrado de uncontacto
		boolean mostrado=false;//Lo mismo pero con el mostrado de un contacto.
		String nom, ap; //variables auxiliares para el nombre y apellidos
		
		String entrada;//String donde se almacenará lo introducido por teclado
		
		InputStreamReader teclado; //Declaro la entrada de datos
		BufferedReader bufferLectura;//Declaro Buffer de entrada
		
		teclado = new InputStreamReader (System.in);//Paso al InputStreamReader la entrada de teclado 
		bufferLectura = new BufferedReader (teclado);//Se almacena en el buffer
		
		//pide el tamaño máximo de la lista, podría ponerlo como cte.
		System.out.print("Introduzca el tamaño MAX de la lista: ");
		entrada=bufferLectura.readLine();
		n_lista = Integer.parseInt(entrada);		
		
		/*Crea la lista e inicializa todos sus valores al "por defecto" así luego
		 * a la hora de colocar los "borrados" al final de la lista para saber cual
		 * usar, se tomará como borrado los que tengan "por defecto" el valor de t_movil.
		 */
		Persona lista[] = new Persona [n_lista];
	//	for(i=0;i<n_lista;i++)
		//	lista[i] = new Persona();
		
		
		
		//Hace el bucle del menú, mientras no se diga que salga del programa (menu==false) no terminará.
		do{
			System.out.print("\n\n\t\tOPCIONES (MAX "+n_lista+" entradas)\n\n\t1.- Nuevo Contacto\n\t2.- Eliminar un Contacto\n\t3.- Mostrar datos de un Contacto\n\t4.- Salir\n\nOpción a realizar (Introduzca número): "); //Imprime el menú
			
			entrada = bufferLectura.readLine();
			
			if (entrada.equals("4")){
				menu=false;
				System.out.println("SALIDA DEL PROGRAMA");
			}
			else if (entrada.equals("9")){
				//MUESTRA TODO LO QUE HAY GUARDADO EN LA LISTA, éste parámetro no se le muestra al usuario, es sólo para comprobación del programador
				for(i=0;i<ctotales;i++){
					System.out.println("Contacto "+i);
					lista[i].Mostrar();
				}
			}
			else if(entrada.equals("1"))
			//CREA UN NUEVO CONTACTO añadiendo cada uno de los campos
			{
				//Este if trata la posibilidad de que no quepan más contactos
				if (ctotales<n_lista){
					lista[ctotales] = new Persona();
					System.out.print("\n\t- CREAR NUEVO CONTACTO -\n\tIntroduzca Nombre: ");
					lista[ctotales].nombre = bufferLectura.readLine();
					System.out.print("\tIntroduzca Apellidos: ");
					lista[ctotales].apellidos = bufferLectura.readLine();
					System.out.print("\tIntroduzca Dirección: ");
					lista[ctotales].direccion = bufferLectura.readLine();
					System.out.print("\tIntroduzca Teléfono Fijo: ");
						entrada = bufferLectura.readLine(); //Previene que de error al no introducir nada en los teléfonos
						if (entrada =="")
							lista[ctotales].t_fijo = 0;
						else
							lista[ctotales].t_fijo = Integer.parseInt(entrada);
						System.out.print("\tIntroduzca Teléfono Móvil: ");
						entrada = bufferLectura.readLine(); //Previene que de error al no introducir nada en los teléfonos
						if (entrada =="")
							lista[ctotales].t_movil = 0;
						else
							lista[ctotales].t_movil = Integer.parseInt(entrada);
					System.out.print("\tIntroduzca Notas: ");
					lista[ctotales].notas = bufferLectura.readLine();
					ctotales++; //cuenta que ha añadido un nuevo contacto al total.
				}
				else System.out.println("*****ERROR: LA LISTA ESTÁ LLENA");
			}
			//BORRA EL CONTACTO que coincide con nombre y apellidos.
			else if(entrada.equals("2")){
				//Se asegura de que haya algún contacto introducido.
				if (ctotales==0)
					System.out.println("*****NO EXISTEN CONTACTOS");
				else{
					System.out.print("\n\t- BORRAR UN CONTACTO -\n\tIntroduzca Nombre: ");
					nom = bufferLectura.readLine();
					System.out.print("\tIntroduzca Apellidos: ");
					ap = bufferLectura.readLine();
					
					/*Recorre la lista de contactos buscando por el nombre
					 * y posteriormente por el apellido, si ambos coinciden, borra el
					 * contacto y disminuye los contactos existentes locales. 
					 * Después, reordena el vector de Personas "lista", dejando los contactos
					 * considerados vacíos al final, para ello se utiliza un for después de
					 * borrar el contacto correspondiente.
					 * Sólo se para en el caso de terminar y no borrar nada, o cuando haya borrado
					 * algún contacto.
					 */
					i=0;
					do{
						//que pasa si no hay contactos? revisar!!
						if (lista[i].nombre.equals(nom)){
							if (lista[i].apellidos.equals(ap)){
								//sobreescribe los CAMPOS del contacto a borrar por los campos
								//Del último, si sobreescribiera el objeto entero, haría una referencia
								//y terminaría dando errores. (paso por valor en tipos simples,
								//por referencia en OBJETOS!.
								lista[i].nombre = lista[ctotales-1].nombre;
								lista[i].apellidos = lista[ctotales-1].apellidos;
								lista[i].direccion = lista[ctotales-1].direccion;
								lista[i].t_fijo = lista[ctotales-1].t_fijo;
								lista[i].t_movil = lista[ctotales-1].t_movil;
								lista[i].notas = lista[ctotales-1].notas;
								ctotales--;//decrementa los contactos totales
								System.out.println("¡BORRADO CORRECTO!");
								borrado = true;
							}
						}
						i++;
					}
					while (i<ctotales&&borrado==false);
					
					if (borrado==false) System.out.println("*****ERROR: No se ha encontrado ese Contacto.");
					borrado = false; //devuelve este valor a su valor por defecto para que el próximo borrado pueda tener lugar
				}
			}
			
			//MUESTRA LOS DATOS DE UN CONTACTO.
			else if (entrada.equals("3")){
//				Se asegura de que haya algún contacto introducido.
				if (ctotales==0)
					System.out.println("*****NO EXISTEN CONTACTOS");
				else{
					System.out.print("\n\t- MOSTRAR UN CONTACTO -\n\tIntroduzca Nombre: ");
					nom = bufferLectura.readLine();
					System.out.print("\tIntroduzca Apellidos: ");
					ap = bufferLectura.readLine();
					i=0;
					do {
						if (lista[i].nombre.equals(nom)){
							if (lista[i].apellidos.equals(ap)){
								System.out.println("Contacto "+i);
								lista[i].Mostrar();
								mostrado = true;
							}
						}
						i++;
					}
					while (mostrado==false&&i<ctotales);
					if (mostrado==false) System.out.println("*****ERROR: No existe el contacto a mostrar.");
					mostrado=false;
				
				}
				
			}
			else System.out.println("*****ERROR: Opción no válida");
		}
		while(menu==true);
		
	}

}
